/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bean;

import datos.TipoConstruccion;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import negocio.GestorTipoConstruccionLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */

public class TipoConstruccionBean {
    @EJB(beanName = "GestorTipoConstruccionBean")
    private GestorTipoConstruccionLocal gestorTipoConstruccionBean;
    private String nombre;
    private String descripcion;
    private boolean mostrarAgregar = false;
    private boolean mostrarModificar = false;
    private int id;

    /** Creates a new instance of TipoConstruccionBean */
    public TipoConstruccionBean() {
    }


    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the mostrarAgregar
     */
    public boolean isMostrarAgregar() {
        return mostrarAgregar;
    }

    /**
     * @param mostrarAgregar the mostrarAgregar to set
     */
    public void setMostrarAgregar(boolean mostrarAgregar) {
        this.mostrarAgregar = mostrarAgregar;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

     /**
     * @return the mostrarModificar
     */
    public boolean isMostrarModificar() {
        return mostrarModificar;
    }

    /**
     * @param mostrarModificar the mostrarModificar to set
     */
    public void setMostrarModificar(boolean mostrarModificar) {
        this.mostrarModificar = mostrarModificar;
    }

    /**
     *
     * @return
     */
    public List getTipoDeObras() {
        return this.gestorTipoConstruccionBean.consultarTipoConstruccion();
    }

    /**
     *
     * @param e
     */
    public void guardarTipoConstruccionOyente(ActionEvent e){
        this.setDescripcion("");
        this.setNombre("");
        this.setMostrarAgregar(true);
        this.setMostrarModificar(false);
    }

    /**
     *
     * @return
     */
    public String guardarTipoConstruccion(){
        TipoConstruccion tc = new TipoConstruccion();
        tc.setNombre(nombre.toUpperCase());
        tc.setDescripcion(descripcion.toUpperCase());
        boolean existe = gestorTipoConstruccionBean.existeNombreTipoConstruccion(tc);
        if (!existe) {
            this.gestorTipoConstruccionBean.agregarTipoConstruccion(tc);
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Tipo de Construccion guardado con exito", ""));
        } else {
            this.setNombre("");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe un Tipo de Construcción con ese nombre", ""));
        }
        return null;
        //Como idea podriamos hacer que navegue a una pagina de error si al agregar hubo un error
    }

    /**
     *
     * @param e
     */
    public void modificarTipoConstruccionOyente(ActionEvent e){
        this.setDescripcion("");
        this.setNombre("");
        this.setMostrarAgregar(false);
        this.setMostrarModificar(true);
        UIParameter component = (UIParameter) e.getComponent().findComponent("idModificar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("nombre");
        this.setNombre(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("descripcion");
        this.setDescripcion(component.getValue().toString());
    }

    /**
     *
     * @return
     */
    public String modificarTipoConstruccion(){
        TipoConstruccion tc = new TipoConstruccion();
        tc.setId(this.getId());
        tc.setNombre(this.getNombre().toUpperCase());
        tc.setDescripcion(this.getDescripcion().toUpperCase());
        boolean existe = gestorTipoConstruccionBean.existeNombreTipoConstruccionModificar(tc);
        if (!existe) {
            this.gestorTipoConstruccionBean.modificarTipoConstruccion(tc);
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Tipo de Construccion modificado con exito", ""));
        } else {
            this.setNombre("");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe un Tipo de Construcción con ese nombre", ""));
        }
        return null;
    }

    /**
     *
     * @param e
     */
    public void eliminarTipoConstruccionOyente(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idBorrar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarTipoConstruccion(){
        TipoConstruccion tc = new TipoConstruccion();
        tc.setId(id);
        this.gestorTipoConstruccionBean.eliminarTipoConstruccion(tc);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Tipo de Construccion eliminado con exito", ""));
        return null;
    }

    /**
     *
     * @param e
     */
    public void cancelarOyente(ActionEvent e) {
        this.setNombre("");
        this.setDescripcion("");
        this.setMostrarAgregar(false);
        this.setMostrarModificar(false);
    }

    /**
     *
     * @return
     */
    public List<String> getNombresTiposConstruccion(){
        return this.gestorTipoConstruccionBean.tiposConstruccion();
    }
}
